#ifndef      __BSP_ST7789_LCD_H
#define	     __BSP_ST7789_LCD_H

#include "main.h"

//单片机IO推挽输出设置定义
//#define USE_LANDSCAPE//测试程序横竖屏切换，横屏请开启此宏，竖屏请屏蔽
//#define MCU_STC12//如果您使用的单片机不是STC12系列(如STC89C52)请屏蔽此宏定义
#ifdef MCU_STC12
sfr P3M1  = 0xB1;	//P3M1.n,P3M0.n 	=00--->Standard,	01--->push-pull
sfr P3M0  = 0xB2;	//					=10--->pure input,	11--->open drain
#endif

//---------------------------液晶屏接线说明-------------------------------------//
//接线前请参考液晶屏说明书第10页引脚定义
// sbit BL        =P3^5;//接模块BL引脚，背光可以采用IO控制或者PWM控制，也可以直接接到高电平常亮
// sbit SCL       =P3^0;//接模块CLK引脚,接裸屏Pin9_SCL
// sbit SDA       =P3^1;//接模块DIN/MOSI引脚，接裸屏Pin10_SDA
// sbit RS        =P3^3;//接模块D/C引脚，接裸屏Pin7_A0
// sbit CS        =P3^4;//接模块CE引脚，接裸屏Pin12_CS(8GND)
// sbit reset     =P3^2;//接模块RST引脚，接裸屏Pin11_RES
//---------------------------End of液晶屏接线---------------------------------//

#define TFT_COLUMN_NUMBER   240
#define TFT_LINE_NUMBER     240
#define TFT_X_START         0
#define TFT_Y_START         0
#define PIC_NUM 28800			//图片数据大小

/******************************* 显示屏SPI通讯引脚定义 连接TFT屏 ***************************/
/******控制信号线******/

#define SPI_SCL_PORT            GPIOA
#define SPI_SCL_PIN		        GPIO_PIN_5  // 串口时钟线

#define SPI_SDA_PORT            GPIOA
#define SPI_SDA_PIN		        GPIO_PIN_7  // 串口数据线

#define SPI_DC_PORT		        GPIOB
#define SPI_DC_PIN		        GPIO_PIN_0  // 指令/数据寄存器选择脚 D/C=’1’:选择数据寄存器 D/C=’0’:选择指令寄存器

#define SPI_CS_PORT		        GPIOB
#define SPI_CS_PIN		        GPIO_PIN_10 // 屏驱动芯片片选脚，低电平有效

#define SPI_RESET_PORT	        GPIOA
#define SPI_RESET_PIN	        GPIO_PIN_4  // 屏复位脚

#define SPI_SCL_EN      gpio_bit_set(SPI_SCL_PORT, SPI_SCL_PIN);
#define SPI_SCL_DIS     gpio_bit_reset(SPI_SCL_PORT, SPI_SCL_PIN);

#define SPI_SDA_EN      gpio_bit_set(SPI_SDA_PORT, SPI_SDA_PIN);
#define SPI_SDA_DIS     gpio_bit_reset(SPI_SDA_PORT, SPI_SDA_PIN);

#define SPI_DC_EN       gpio_bit_set(SPI_DC_PORT, SPI_DC_PIN);
#define SPI_DC_DIS      gpio_bit_reset(SPI_DC_PORT, SPI_DC_PIN);

#define SPI_CS_EN       gpio_bit_set(SPI_CS_PORT, SPI_CS_PIN);
#define SPI_CS_DIS      gpio_bit_reset(SPI_CS_PORT, SPI_CS_PIN);

#define SPI_RST_EN      gpio_bit_set(SPI_RESET_PORT, SPI_RESET_PIN);
#define SPI_RST_DIS     gpio_bit_reset(SPI_RESET_PORT, SPI_RESET_PIN);

/******************************* 定义显示屏常用颜色 ********************************/
#define     BACKGROUND		            BLACK   //默认背景颜色

#define     WHITE                       0xFFFF	    // 白色
#define     BLACK                       0x0000	    // 黑色 
#define     GREY                        0xF7DE	    // 灰色 
#define     BLUE                        0x001F	    // 蓝色 
#define     BLUE2                       0x051F	    // 浅蓝色 
#define     RED                         0xF800	    // 红色 
#define     RED_2                       0xE003      // 低电量用红色
#define     MAGENTA                     0xF81F	    // 红紫色，洋红色 灯笼海棠(紫红色)
#define     GREEN                       0x07E0	    // 绿色 
#define     GREEN_2                     0x67E0      // 明绿
#define     CYAN                        0x7FFF	    // 蓝绿色，青色 
#define     YELLOW                      0xFFE0	    // 黄色 
#define     BRED                        0xF81F
#define     GRED                        0xFFE0
#define     GBLUE                       0x07FF

#define		PINK			            0xFE19      // 粉色
#define		LIGHT_PINK		            0xFDB8      // 浅粉色
#define		WHITE_SMOKE		            0xF7BE      // 白烟
#define		LIGHT_PURPLE	            0xFF9E      // 脸红的淡紫色
#define		VIOLET_RED		            0xdb92      // 苍白的紫罗兰红色
#define		INDIGO			            0x4810      // 靛青
#define		GLODEN			            0xfea0      // 金色
#define		VERMILION		            0xfa60      // 朱红
#define		GRAY		                0x8410      // 灰

/********************************** 声明变量 ***************************************/

extern uint16_t LCD_X_LENGTH,LCD_Y_LENGTH; 

/********************************** 声明函数 ***************************************/

void LCD_Initial(void);
void LCD_SetFont(sFONT *fonts);
void LCD_SetColors(uint16_t TextColor, uint16_t BackColor);
void LCD_SetTextColor(uint16_t Color);
void LCD_SetBackColor(uint16_t Color);
void LCD_OpenWindow(uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight);
void LCD_FillColor(uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight, uint16_t color);
void LCD_SetPointPixel(uint16_t usX, uint16_t usY);
void LCD_DrawLine(uint16_t usX1, uint16_t usY1, uint16_t usX2, uint16_t usY2);
void LCD_DrawRectangle(uint16_t usX_Start, uint16_t usY_Start, uint16_t usWidth, uint16_t usHeight, uint8_t ucFilled);
void LCD_DrawChar_CH(uint16_t x,uint16_t y,uint32_t color,uint16_t word_serial_number);
void LCD_DrawProgressBar(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t value);
void LCD_DrawString_EN(uint16_t x, uint16_t y, const char *str);
#endif


